iT邦幫忙

1

梯度下降法(10) -- 總結

  • 分享至 

  • xImage
  •  

TensorFlow官網首頁的範例只有短短的10多行,但是每一行指令及參數都內含許多玄機,雖然我們在前面已回答及實驗許多核心問題,但還是有一些疑問待探討,以下就來作一些補充說明。
https://ithelp.ithome.com.tw/upload/images/20250622/20001976vutLJpHCRF.png
https://ithelp.ithome.com.tw/upload/images/20250622/20001976xmf5qi9fZK.png

其他問題

除了前面的討論,還是有一些問題:
1.要準備多少訓練資料才夠?
2.要訓練幾個執行週期(Epoch)才夠?
3.Dense輸出的神經元個數該設定幾個? Dense要幾層?
4.如何保證不會錯判類別? 例如停車收費,業者要求『車牌號碼寧可辨識不出來,也不要辨識錯誤』,因為辨識不出來,可以人工補救,辨識錯誤則會引起客訴,造成業者金錢損失及聲譽受損,許多金融產業或工業都會有類似的要求。
以上幾乎都沒有標準答案,只有一些指引。

要準備多少訓練資料才夠?

要準備多少訓練資料,才可以保證達到期望的準確度? 很簡單,當然是越多越好,以手寫阿拉伯數字辨識為例,如果可以蒐集全世界每一個人的寫法,那麼訓練出來的模型,必然會令人滿意,但是,現實上是不可行的,必須考慮時間、人力及經費的限制,而有所取捨,另外,辨識的複雜度也是考量的因素,例如MNIST與CIFAR-10,如下圖,後者背景複雜,辨識難度高很多,當然要更多的訓練資料,例如,ILSVRC影像辨識大賽的模型就是利用ImageNet 100多萬張的圖片作為訓練資料,加上更複雜的神經網路、更多的訓練週期,準確率可高達98%以上。

https://ithelp.ithome.com.tw/upload/images/20250627/20001976qjs8hvoX2X.png
圖一. MNIST vs CIFAR-10

但是,很多的訓練資料會引發另一個問題,一次載入所有的訓練資料,記憶體會爆掉,因此,TensorFlow提供Dataset,一次只讀取一批(batch)資料進行訓練,完成後再讀取下一批資料訓練,這樣才能節省記憶體,詳閱『同時搞定TensorFlow、PyTorch (三) :資料前置處理』,PyTorch則使用Dataset/DataLoader搭配,兩者都是使用Iterator資料結構,另外,可以使用Prefetching、Cache、平行處理...等設定,加速訓練,詳閱『Better performance with the tf.data API』

https://ithelp.ithome.com.tw/upload/images/20250627/20001976EIMBLHaQwC.png
圖二. Prefetching可在訓練一批資料時,同時讀取下一批資料訓練,充分利用CPU/GPU及硬碟資源

訓練幾個執行週期(Epoch)才夠?

通常我們會訓練較多的執行週期,確保模型的準確度,但是這樣做有兩個問題:

  1. 訓練非常耗時,專案進行過程常要反覆訓練模型,會耗費許多人力及硬體資源。
  2. 可能會造成模型過度擬合(Overfitting)。

TensorFlow/Keras有提供EarlyStopping callback,可設定條件提早結束訓練,例如訓練多個執行週期都沒有顯著進展,即可停止訓練,不過這種方式並不保證面對測試資料或新資料時,模型會有高準確率,還是應以後續的測試評分為準,例如手寫阿拉伯數字辨識,官網範例準確率高達97%,但實際使用滑鼠書寫測試,準確率並不高。

Dense輸出的神經元個數該設定幾個? Dense要幾層?

理論上越多神經元個數或越多層Dense,都會產生更多的迴歸線,模型會越複雜,準確率會提升,但是,到底要設定多少,並沒有定論,因為,每個計畫收集到的訓練資料筆數均不相同,資料內容也五花八門,目前並沒有適當的指引,只有靠經驗與實驗判斷。

如何保證不會錯判類別?

前面討論過,最後一層Dense輸出可經由Softmax activation function轉換為機率格式,但其預測值只是排序(Ranking),並非可信度,要避免錯判類別,可另外再考慮以相似度(Cosine similarity)或其他方式驗證,以降低錯判的機率。

各式演算法的延伸

前面僅對一般的神經網路(Vainilla neural network)進行討論,以下再針對其他的神經網路發展的動機及關聯,進行簡單的說明。

影像相關演算法

https://ithelp.ithome.com.tw/upload/images/20250622/20001976lmdmGmhWwf.png

  1. 卷積神經網絡(Convolutional Neural Networks,CNN):以手寫阿拉伯數字辨識為例,官網範例以像素為特徵,但以人類肉眼辨識圖像,不可能是一個個像素比對,應該是針對線條或輪廓辨識,因此CNN利用卷積(Convolution)將像素轉換為線條,再餵入Dense辨識。
    https://ithelp.ithome.com.tw/upload/images/20250622/20001976nFMJdRFuZF.png
    圖三. 卷積(Convolution)

另外,有兩個技巧值得關注:

  • 資料增補(Data Augmentation):手寫阿拉伯數字辨識實測不準確的原因還有一個,MNIST是收集美國郵局員工及高中生手寫的圖像,與台灣人寫法有些許差異,另外,當初是使用筆書寫,再掃描存檔,與我們以滑鼠書寫也不相同,因此,我們可以運用Data Augmentation的影像處理技術,產生各種偏斜、大小不同的訓練資料,使訓練出來的模型更強韌,可以接受各種書寫風格,這種由電腦生成訓練資料的技術也可應用到語音、文字上,可大量減少標記資料的人力。
    https://ithelp.ithome.com.tw/upload/images/20250622/20001976YEclc293Gd.png
    圖四. 資料增補(Data Augmentation)

  • 轉移學習(Transfer Learning):將預先訓練好的模型(Pre-trained Models)應用到其他類型物件的辨識,例如辨識ImageNet提供1000種事物的模型,接上自己的input及辨識層,即可辨識1000種事物以外的東西,大語言模型(LLM)也可利用轉移學習,調校(Fine tuning)特定任務,例如情緒分析、翻譯...等。

https://ithelp.ithome.com.tw/upload/images/20250622/2000197644HsA492iR.png
圖五. GPT Model與微調任務(Fine-tuning tasks),圖片來源:ChatGPT Architecture Explained

  1. 物件偵測(Object detection):使用CNN,基本上可以建立辨識任何物件的模型,但僅侷限於辨識單一物件,如果要在單張圖像或影片中辨識多個物件,而且要標示位置,就必須再加強CNN演算法,最初的R-CNN(Region-based Convolutional Neural Network),先使用Region Proposal Network(RPN)從圖片中找出2000個候選框,再將每個候選框交由多個CNN及分類模型,辨識哪些候選框含要辨識的物件,由於要辨識2000個候選框,速度太慢,之後就陸續有Fast R-CNN、Faster R-CNN等演算法出現。但利用RPN找出候選框再使用CNN辨識,屬於兩階段(Two stages)的作法,RPN缺乏自我學習的能力,之後Joseph Redmon發明YOLO(You Only Look Once)一階段的演算法,犧牲部分準確度,換取偵測速度的提升。

YOLO至今已經發展至第12版,其中也有中研院的貢獻(v4、v7、v9),以Ultralytics提供的解決方案最為完整,光基本功能就包括:

  • 分類(Classification)
  • 物件偵測(Object Detection)
  • 語義分割(Semantic Segmentation)
  • 姿態辨識(Pose Estimation)
  • 物件方向偵測(Oriented Object Detection)

延伸的解決方案更包括:
https://ithelp.ithome.com.tw/upload/images/20250622/20001976Opp7DoFTnn.png

https://ithelp.ithome.com.tw/upload/images/20250622/20001976QD9lIrw955.png

  1. 影像生成:除了辨識,生成式AI受到更多的關注,以下列出常見的演算法。
  2. Encoder-decoder架構:Encoder就是CNN神經層,擷取物件的線條輪廓特徵,Decoder由線條輪廓特徵重建影像,最簡單的演算法Auto-encoder(AE),可用於去除雜訊(Denoising)、異常偵測(Anomaly detection)。但Auto-encoder只能生成固定的圖像,Variational auto encoder將線條輪廓特徵轉換為機率分配,即可每次生成不同的圖像。
  3. U-net:物件偵測只會標示的矩形框,不夠精準,語義分割(Semantic Segmentation)可進一步使用像素標示物件範圍,要達到此要求,U-net採用多層的Encoder-decoder,以提升像素標示的精準度,也可用於去背。
  4. 擴散模型(Diffusion model):是MidJourney、Stable Diffusion、OpenAI Image generation and editing...等模型的基礎演算法,它結合VAE及U-net,VAE只加了一次雜訊,Diffusion model則是逐層加入雜訊,再利用Decoder逐步預測雜訊,類似U-net,是對稱的多層架構。

自然語言處理(NLP)相關演算法

自然語言處理(NLP)概分兩個方向:

  1. 詞向量:將詞(Word)轉換為向量,才能以神經網路訓練模型。
  2. 演算法:考慮語文特性,建構各式神經網路。

https://ithelp.ithome.com.tw/upload/images/20250622/20001976ApFwL2Bsr8.png

詞向量發展趨勢:

  1. BoW(Bag of Words):整理訓練資料的詞彙表(Vocabulary),再統計語料(Corpus)中每個詞出現的次數,即可將語料轉換為向量。

https://ithelp.ithome.com.tw/upload/images/20250622/20001976IgNdY7rlSi.png

  1. TF-IDF(Term Frequency-Inverse Document Frequency):降低大多數語料會出現的單字權重,例如very、able、use...等,這些單字可能都不是關鍵詞,故須降低其重要性。
  2. 詞嵌入(Word embedding):BoW、TF-IDF有一個致命的缺點,他們不含上下文(Context)資訊,因此Word2Vec、GloVe等演算法,以最常出現的上下文來代表一個詞。
  3. Transformer:有些單字一詞多義,例如Apple可代表蘋果(水果)及蘋果公司,必須考慮輸入語句的上下文,才能理解語料的意義。

演算法發展趨勢:

  1. 循環神經網路(Recurrent Neural Network, RNN):一般的神經網路(Vainilla neural network)假設同層的神經元互相是獨立的,但語文必須考慮上下文,故RNN會將上一個神經元的輸出連接至下一個神經元,如下:
    https://ithelp.ithome.com.tw/upload/images/20250622/20001976vFQ19uVIKh.png
  2. 長短期記憶網路(Long Short-Term Memory, LSTM):語文除了考慮上下文,還必須考慮長期記憶,例如,講到『精忠報國』,一定會聯想到『岳飛』,這是因為受到小學教育的影響。
  3. Transformer:RNN/LSTM有一個致命缺點,他們必須循序訓練,非常耗時,因此,Transformer改用Attention計算每個詞與上下文的關聯度,此方式可以平行處理,顯著縮短大語言模型(LLM)訓練時間。

結語

以上的神經網路模型不管多複雜,都是以梯度下降法求解,因此,筆者認為要敲開深度學習的大門,必須要徹底理解梯度下降法,後續才能快速學會各種演算法及發展趨勢,更多的範例及應用,可參閱拙著的『深度學習最佳入門與專題實戰』一書。

工商廣告:)

《深度學習最佳入門與專題實戰》導讀講座 2025/07/11 歡迎報名

書籍:

  1. 深度學習最佳入門與專題實戰:理論基礎與影像篇, 2025/05 再版
  2. 深度學習最佳入門與專題實戰:自然語言處理、大型語言模型與強化學習篇, 2025/05 再版
  3. 開發者傳授 PyTorch 秘笈
  4. Scikit-learn 詳解與企業應用

影音課程:

深度學習PyTorch入門到實戰應用

企業包班

系列文章目錄

徹底理解神經網路的核心 -- 梯度下降法 (1)
徹底理解神經網路的核心 -- 梯度下降法 (2)
徹底理解神經網路的核心 -- 梯度下降法 (3)
徹底理解神經網路的核心 -- 梯度下降法 (4)
徹底理解神經網路的核心 -- 梯度下降法的應用 (5)
梯度下降法(6) -- 學習率動態調整
梯度下降法(7) -- 優化器(Optimizer)
梯度下降法(8) -- Activation Function
梯度下降法(9) -- 損失函數
梯度下降法(10) -- 總結


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言